package com.ktjiaoyu.utils;

import java.util.ArrayList;
import java.util.List;

public class Page<T> {
        // 当前页码
        private Integer pageNo = 1;
        // 每页数量
        private Integer pageSize = 5;
        // 总数据量
        private Integer totalCount = null;
        // 总页数
        private Integer totalPageCount = 1;
        // 分页数据集合
        private List<T> data;

        public Integer getPageNo() {
            return pageNo;
        }

        public Integer getPageSize() {
            return pageSize;
        }

        public void setPageSize(Integer pageSize) {
            this.pageSize = pageSize;
        }

        public Integer getTotalCount() {
            return totalCount;
        }

        public Integer getTotalPageCount() {
            return totalPageCount;
        }

        public void setTotalPageCount(Integer totalPageCount) {
            this.totalPageCount = totalPageCount;
        }

        public List<T> getData() {
            return data;
        }

        public void setData(List<T> data) {
            this.data = data;
        }

        public void setPageNo(Integer pageNo) {
            if(pageNo <= 0){
                pageNo = 1;
            }
            if(totalCount != null){
                // 计算过总页数后，页码的设置要参考总页数
                if(totalPageCount >= 1 && pageNo > totalPageCount){
                    pageNo = totalPageCount;
                }
            }
            this.pageNo = pageNo;
        }
        public void setTotalCount(Integer totalCount) {
            this.totalCount = totalCount;
            if(this.totalCount % this.pageSize == 0){
                this.totalPageCount = this.totalCount / this.pageSize;
            }else{
                this.totalPageCount = this.totalCount / this.pageSize + 1;
            }
        }
        public int offset(){
            return (pageNo - 1) * pageSize;
        }

        /**  是否第一页 */
        public boolean isFirst(){
            return pageNo == 1;
        }
        /** 是否最后一页 */
        public boolean isLast(){
            return pageNo == totalPageCount;
        }
        /** 是否还有下一页 */
        public boolean hasNext(){
            return pageNo < totalPageCount;
        }
        /** 是否还有上一页 */
        public boolean hasPrevious(){
            return pageNo > 1;
        }
        /**
         * 页面上显示指定长度的页码
         * @param showCount
         * @return
         */
        public List<Integer> getShowPageNos(int showCount) {
            List<Integer> list = new ArrayList<Integer>();
            // 先加中间页码
            list.add(pageNo);
            // 每次页面计算的步长
            int step = 1;
            while (list.size() < showCount) {
                boolean added = false;
                int left = pageNo - step; // 左边减页码
                int right = pageNo + step; // 右边加页码
                if (left >= 1) {
                    // 左边大于等于1可以添加
                    list.add(0, left);
                    added = true;
                }
                if (right <= totalPageCount) {
                    // 右边小于等于总页数可以添加
                    list.add(right);
                    added = true;
                }
                if (!added) {
                    // 如果左右都没加成功，则退出
                    break;
                }
                // 下次循环增加步长
                step++;
            }
            return list;
        }

}
